// 导入二次封装的axios
import request from '@/utils/request'

/* api接口请求函数书写的时候在ts当中一定注意1.参数类型 2.返回值的类型 */
// 1.定义登录接口的参数类型
export interface LoginParamsData {
  username:string,
  password:string
}
// 2. 定义登录接口返回值的类型
interface TokenData {
  token:string
}

// 定义获取用户信息的返回值类型
export interface UserInfoData {
  "routes": string[],
  "buttons": string[],
  "roles": string[],
  "name": string,
  "avatar": string
}

export default {

  /**
   * @description 登录
   * @url http://39.98.123.211:8170/admin/acl/index/login
   * @param loginParams 
   * @returns Promise<TokenData>
   */
  userLogin(loginParams:LoginParamsData){
    /* ****************************************************** 
    axios本身是一个函数，既然是函数也就是函数对象，
      函数当函数用就是加括号(1.函数式写法)，
      函数当对象用就是a.b（2.对象式写法）
    
    1.函数式写法：
        配置对象：属性名不能改变，属性值可以改变的对象
        params参数只能写在路径
        query参数有两个地方可以写：
          1、url后面以?分割key=value&key=value 
          2、在params当中配置
        data请求体参数，只能在data配
    示例如下：
          axios({
            url:"lcoalhost:3000/userinfo/1",
            method,
            data,
            params:{id:1}
          })

    2.对象式写法：
        axios.get(url,配置对象)           ----get请求 一般没有请求体参数的
        axios.delete(url,配置对象)        ----delete请求 一般没有请求体参数的
        axios.post(url,data,配置对象)
        axios.put(url,data,配置对象)
        axios.patch(url,data,配置对象)
    示例如下：
        axios.get(url,[config])         ----get请求 一般没有请求体参数的
        axios.delete(url,[config])      ----delete请求 一般没有请求体参数的
        axios.post(url,[data,[config]])
        axios.put(url,[data,[config]])
        axios.patch(url,[data,[config]]) 
    * *******************************************/
    return request.post<any,TokenData>('/admin/acl/index/login',loginParams)
  },


  /**
   * @description 获取用户信息
   * @url http://39.98.123.211:8170/admin/acl/index/info
   * @returns Promise<UserInfoData>
   */
  getUserInfo(){
    return request.get<any,UserInfoData>('/admin/acl/index/info')
  },


  /**
   * @description 退出登录
   * @url http://39.98.123.211:8170/admin/acl/index/logout
   * @returns Promise<null>
   */
  ueerLogout(){
    return request.post<any,null>('/admin/acl/index/logout')
  }
}